// Author: wsfuyibing <682805@qq.com>
// Date: 2025-05-08

package kind

import "fmt"

// Balance
// 金额.
type Balance float64

const (
	BalanceZero Balance = 0
)

func (o Balance) Equal(v Balance) bool        { return o.Int() == v.Int() }
func (o Balance) Greater(v Balance) bool      { return o.Int() > v.Int() }
func (o Balance) GreaterEqual(v Balance) bool { return o.Int() >= v.Int() }
func (o Balance) Less(v Balance) bool         { return o.Int() < v.Int() }
func (o Balance) LessEqual(v Balance) bool    { return o.Int() <= v.Int() }

func (o Balance) Reset() Balance {
	return Balance(float64(int(o.Float()*100)) / 100)
}

// Float
// 浮点型, 单位: 元.
func (o Balance) Float() float64 { return float64(o) }

// Int
// 整型值, 单位: 分.
func (o Balance) Int() int { return int(o.Float() * 100) }

// IsNegative
// 是否负值.
func (o Balance) IsNegative() bool { return o.Int() < 0 }

// IsPositive
// 是否正值.
func (o Balance) IsPositive() bool { return o.Int() > 0 }

// IsZero
// 是否为零值.
func (o Balance) IsZero() bool { return o.Int() == 0 }

// Reverse
// 取反值.
func (o Balance) Reverse() Balance { return Balance(-o.Float()) }

// Balance
// 格式化.
func (o Balance) String() string {
	return fmt.Sprintf(`%.02f`, o)
}

func (o Balance) Zero() Balance {
	return BalanceZero
}
